const mongoose = require('mongoose');

// 本地数据库连接字符串
const DB_URI = 'mongodb://localhost:27017/RN';

// 连接配置选项
const options = {
    connectTimeoutMS: 10000, // 连接超时时间
    socketTimeoutMS: 45000,  // 套接字超时时间
};

// 连接数据库
async function connectDB() {
    try {
        await mongoose.connect(DB_URI, options);
        console.log('✅ 数据库连接成功！');
        console.log(`📍 连接地址: ${DB_URI}`);
        console.log(`📊 连接状态: ${mongoose.connection.readyState === 1 ? '已连接' : '连接中'}`);
    } catch (error) {
        console.error('❌ 数据库连接失败！');
        console.error('错误信息:', error.message);
        console.error('完整错误:', error);
        
        // 根据错误类型给出不同的提示
        if (error.message.includes('ECONNREFUSED')) {
            console.error('💡 提示: 请检查 MongoDB 服务是否已启动');
        } else if (error.message.includes('Authentication failed')) {
            console.error('💡 提示: 请检查数据库用户名和密码是否正确');
        }
    }
}

// 监听连接事件
mongoose.connection.on('connected', () => {
    console.log('🔗 Mongoose 连接已建立');
});

mongoose.connection.on('error', (err) => {
    console.error('🔥 Mongoose 连接错误:', err);
});

mongoose.connection.on('disconnected', () => {
    console.log('🔌 Mongoose 连接已断开');
});

// 优雅关闭数据库连接
process.on('SIGINT', async () => {
    try {
        await mongoose.connection.close();
        console.log('📴 数据库连接已关闭');
        process.exit(0);
    } catch (error) {
        console.error('关闭数据库连接时出错:', error);
        process.exit(1);
    }
});

// 导出连接函数
module.exports = {
    connectDB,
    mongoose
};

// 如果直接运行此文件，则执行连接
if (require.main === module) {
    connectDB();
}
